iT邦幫忙

2024 iThome 鐵人賽

DAY 6
0

介紹

我們在一開始介紹單例,假如我們的 App 需要取得會員相關資料,再做事情,例如呼叫 API 什麼的,所以就像以下程式碼

Member member = new Member();
member.setName("AndyAWD");
member.setAge("18");
member.setAddress("Kaohsiung");
member.setPoint("9527");
//對會員資料做事情

但如果某天你沒睡好,把程式碼做了一些修改

Member member = new Member();
member.setName("AndyAWD");
//對會員資料做事情
member.setAge("18");
member.setAddress("Kaohsiung");
member.setPoint("9527");

所以年齡、地址、點數還沒寫入就做事情,這樣就麻煩了,所以我們需要創造者模式(Builder),一次把該寫入的都寫入,中途也不會被插入

Member member = new Member
        .Builder()
        .setName("AndyAWD")
        .setAge("18")
        .setAddress("Kaohsiung")
        .setPoint("9527")
        .build();
//對會員資料做事情

創造者模式實作

  1. 在原本的類別內多一個靜態內部類別
public class Member {
    
    public static class Builder {

    }
}    
  1. 增加靜態內部類別建構子
public class Member {

    public Member(Builder builder) {

    }        
        
    public static class Builder {

    }
}  
  1. 增加設定姓名方法
public class Member {
    
    private String name;

    public Member(Builder builder) {
        this.name = builder.name;
    }        
        
    public static class Builder {
        
        private String name;
        
        public Builder setName(String name) {
            this.name = name;
            return this;
        }
        
    }
}  
  1. 增加設定年齡方法
public class Member {
    
    private String name;
    private String age;
    
    public Member(Builder builder) {
        this.name = builder.name;
        this.age = builder.age;
    }        
        
    public static class Builder {
        
        private String name;
        private String age;        
        
        public Builder setName(String name) {
            this.name = name;
            return this;
        }
        
        public Builder setAge(String age) {
            this.age = age;
            return this;
        }        
    }
}  
  1. 後面就以此類推

上一篇
113/05 - 抽象工廠模式(Abstract Factory)- Kotlin
下一篇
113/07 - 創造者模式(Builder)- Kotlin
系列文
肯定會斷賽之在 Android 開發使用設計模式30
圖片
  直播研討會
圖片
{{ item.channelVendor }} {{ item.webinarstarted }} |
{{ formatDate(item.duration) }}
直播中

尚未有邦友留言

立即登入留言